package com.wjw.java.others.string_;

/**
 * 字符串特性：
 * 1.两个字符串常量相加,接收的变量,指向的是常量池中的地址
 * 2.两个字符串变量相加,接收的变量,指向的是堆中的地址
 */
public class StringExercise {
    public static void main(String[] args) {
        /**
         * a指向常量池中的"abc"
         * b指向常量池中的"def"
         * c指向常量池中的"abcdef"
         */
        String a = "abc";
        String b = "def";
        String c = "abc" + "def";
        /**
         * 通过打断点可以看到底层代码的执行步骤：
         * 1.先创建一个StringBuilder sb = new StringBuilder_();
         * 2.sb.append("abc");
         * 3.sb.append("def");
         * 4.String d = sb.toString();
         * 其实d指向的是堆中的对象String value[] -> 常量池中的"abcdef"
         */
        String d = a + b;
        String e = "abcdef";
        System.out.println(d == e);//false,因为d指向的是堆中的地址,而e指向的是常量池中的地址
    }
}
